perm filename ROMANU.MF[1,3] blob sn#549056 filedate 1980-12-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00028 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	% Computer Modern Roman upper case:
C00005 00003	"The letter A"
C00007 00004	"The letter B"
C00009 00005	"The letter C"
C00011 00006	"The letter D"
C00012 00007	"The letter E"
C00014 00008	"The letter F"
C00016 00009	"The letter G"
C00019 00010	"The letter H"
C00020 00011	"The letter I"
C00021 00012	"The letter J"
C00022 00013	"The letter K"
C00024 00014	"The letter L"
C00025 00015	"The letter M"
C00027 00016	"The letter N"
C00029 00017	"The letter O"
C00030 00018	"The letter P"
C00031 00019	"The letter Q"
C00033 00020	"The letter R"
C00035 00021	"The letter S"
C00038 00022	"The letter T"
C00039 00023	"The letter U"
C00040 00024	"The letter V"
C00041 00025	"The letter W"
C00044 00026	"The letter X"
C00046 00027	"The letter Y"
C00048 00028	"The letter Z"
C00049 ENDMK
C⊗;
% Computer Modern Roman upper case:
% This file is extracted from ROMITU, for use when only 26 letters are wanted.
% Each character code is shifted by the amount "codeoffset".
% For example, when making "caps and small caps" fonts, set codeoffset='40,
% to get the upper case letters moved into lower case positions.

new mc,lbowl,rbowl,rstem,rv,hic;	% quantities used to compute spacing
mc=mi/pu;	% converts to relative units when $\\{mi}=1$
lbowl=.3phh.slant+.5pu;	% used at left of upper-case bowl
rbowl=.7phh.slant-.5pu;	% used at right of upper-case bowl
rstem=phh.slant+(ucs+2sc-1.5)pu;	% used at right of tall stem
rv=phh.slant+(ucs+2sc-1)pu;	% used at right of tall diagonal
hic=1-.5mi;	% used when half the italic correction goes into \\{rtcorr}
"The letter A";
call charbegin(codeoffset+`A,13,2sc,2sc,phh,0,0);
hpen; new w99; w99=round .5[w4,w5];
lft0x1=round 1.5u; bot0y1=0;
rt99x4=round(r-1.5u); bot99y4=0;
top0y3=top99y2=hh+o+oo;
x3-x1=x4-x2; rt99x2=rt0x3+del;
w99 draw 2..4; w0 draw 2..3;	% right diagonal stroke
y5=y6=e;
new aa,bb;	% auxiliary variables for intersection of lines
x5-1=aa[x1,x3]; y5=aa[y1,y3];
x6+1=bb[x4,x2]; y6=bb[y4,y2];
w0 draw 5..6;	% bar line
lpen#; w99 draw 3..5;	% erase excess at upper left
hpen; w0 draw 3..1;	% left diagonal stroke
if ucs≠0:
	call `a dserif(1,0,3,-ucs);
	call `b dserif(1,0,3,+ucs);	% left serif
	call `c serif(4,99,2,-ucs);
	call `d serif(4,99,2,+ucs);	% right serif
fi.
"The letter B";
call charbegin(codeoffset+`B,12,2sc,-.5mc(.75phh.slant-.5pu),phh,0,hic(.75phh.slant-.5pu));
hpen; lft4x1=lft4x2=round 2u; top4y1=hh; 
bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower serif
fi;
x3=1/2[2u,r];  y3=y1;
rt5x4=round(r-u);  y4=good0 1/2hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,4,w5);	% upper bowl
x5=x1; x6=x3+1/2u;  y4=y5=y6;
rt5x7=round(r-1/2u); bot5y7=0;
w0 draw 5..6;	% middle bar line
call `f darc(6,7,w5);	% lower bowl
x8=x6;  y8=y7;  w0 draw2..8.	% lower bar line
"The letter C";
if ucs≠0: call charbegin(codeoffset+`C,13,mc.lbowl,-.5mc(phh.slant-.5pu),
					phh,0,hic(phh.slant-.5pu));
else: call charbegin(codeoffset+`C,11,mc.lbowl,-.5mc(phh.slant-.5pu),
					phh,0,hic(phh.slant-.5pu));
fi;
hpen;
rt0x1=round(r-u); x5=x1; lft5x3=round u; x2=x4=.5r+u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if ucs=0: x6=r+2u; new aa; x1=aa[x2,x6];
	y1=(sqrt(1-aa.aa))[y6,y2];
else:	if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
	fi;
	x6=x1; x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
	w0 ddraw 1..7,8..7;	% upper serif
	lpen#; w5 draw (6..)1..2{-1,0};	% erase spurious part
fi;
hpen; y5=hh-y1;
w0 draw (6..)1..2{-1,0};	% upper right stroke
call `a darc(2,3,w5);		% main stroke
w0 draw 4{1,0}..5(..6).		% lower right stroke
"The letter D";
call charbegin(codeoffset+`D,13,2sc,-mc(rbowl),phh,0,mi[rbowl+.5pu,0]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower serif
fi;
x3=x4=6u; rt5x5=round(r-.5u);
y3=y1; y4=y5=y2;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..2.	% lower bar line
"The letter E";
call charbegin(codeoffset+`E,12,2sc,sc-.5mc.armic,phh,0,hic.armic);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.25u); x6=round(x4+.5u); y5=y2; y6=y5+as;
call `e arm(1,3,4);	% upper arm and serif
call `f arm(2,5,6);	% lower arm and serif
x7=x1; y7=good6 .52[y2,y1]; y8=y7;
if ucs≠0: x8=x9=x10=good0(r-4.5u); y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% middle arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% middle arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8.	% middle arm
"The letter F";
call charbegin(codeoffset+`F,12,2sc,sc-mc(armic-2.5pu),phh,0,mi[armic,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
call `e arm(1,3,4);	% upper arm and serif
x7=x1; y7=y8=good6 .5[y1,y2];
if ucs≠0: x8=x9=x10=good0 7u; y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% lower arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% lower arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8.	% lower arm
"The letter G";
if ucs=0: if m<.6hh: call charbegin(codeoffset+`G,14,mc.lbowl,
						sc-mc(2/3phh.slant+(sc-1.5)pu),
						phh,0,(1-mi)(2/3phh.slant+(sc-1.5)pu));
	else: call charbegin(codeoffset+`G,14,mc.lbowl,
						1-mc(px.slant+(sc-1.5)pu),
						phh,0,(1-mi)(px.slant+(sc-1.5)pu));
	fi;
else: call charbegin(codeoffset+`G,14,mc.lbowl,
					sc-mc(phh.slant+(sc-1.5)pu),
					phh,0,(1-mi)(phh.slant+(sc-1.5)pu));
fi;
hpen;
rt0x1=rt4x9=round(r-2u); lft5x3=round u; x2=x4=7.5u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
fi;
x6=x1; y9=good6 .1[e,m]; x9=x10;
if ucs≠0: x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
	w0 ddraw 1..7,8..7;	% upper serif
	lpen#; w5 draw (6..)1..2{-1,0};	% erase spurious part
fi;
hpen; w0 draw (6..)1..2{-1,0};	% upper right stroke
call `a darc(2,3,w5);		% main stroke
if w0=w4: w0 draw 4{1,0}..9{0,1};	% lower right stroke
	bot0y10=0; draw 9..10;	% stem and spur
else: y11=y10=y13=1/3y9;
	lft0x11=lft4x9;
	rt0x12=rt0x13=rt4x9; bot0y12=0;
	w0 draw 4{1,0}..11..9{0,1};	% lower right stroke
	w4 draw 9..10;	% stem
	w0 ddraw 13..12, 11{0,-1}..12{2(x12-x11),y12-y11}; % spur
fi;
if ucs<2.25: call `b serif(9,4,10,-2.25);
else: call `b serif(9,4,10,-ucs);	% lower serif
fi;
if ucs>0: call `c serif(9,4,10,+1.25);
fi.
"The letter H";
call charbegin(codeoffset+`H,13,2sc,2sc-.5mc.rstem,phh,0,hic.rstem);
hpen; lft4x1=round 2u; x2=x1;
rt4x3=round(r-2u); x4=x3;
top4y1=hh; y1=y3;
bot4y2=0; y2=y4;
w4 draw 1..2;	% left stem
w4 draw 3..4;	% right stem
if ucs≠0: call `a serif(1,4,2,-ucs);
		call `b serif(1,4,2,ucs);	% upper left serif
	call `c serif(2,4,1,-ucs);
		call `d serif(2,4,1,ucs);	% lower left serif
	call `e serif(3,4,4,-ucs);
		call `f serif(3,4,4,ucs);	% upper right serif
	call `g	serif(4,4,3,-ucs);
		call `h serif(4,4,3,ucs);	% lower right serif
fi;
x5=x1; x6=x3; y5=y6; y5=.52hh;
w0 draw 5..6.	% bar
"The letter I";
call charbegin(codeoffset+`I,6,0,-.5mc(phh.slant-.25pu),phh,0,hic(phh.slant-.25pu));
hpen; x1=x2=good4 .5r; top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
new ss;
if ucs≠0: ss=1.1ucs; else: ss=2.25-.5w4/u;
fi;
call `a serif(1,4,2,-ss); call `b serif(1,4,2,ss);	% upper serif
call `c serif(2,4,1,-ss); call `d serif(2,4,1,ss).	% lower serif
"The letter J";
call charbegin(codeoffset+`J,9,0,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; rt4x1=round(r-2u); top4y1=hh; y2=.2hh; x2=x1;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% serif
fi;
lft0x4=lft3x5; rt3x5=round 2.75u; y4=y5=1/6hh;
x3=.5[x4,x2]; bot0y3=-o;
call `c arc(3,2,w4);	% tail
w0 draw 3{-1,0}..4{0,1}; cpen; w3 draw 5.	% bulb
"The letter K";
call charbegin(codeoffset+`K,14,2sc,2sc-.5mc(phh.slant+(ucs+2sc-1.5)pu),
				phh,0,hic(phh.slant+(ucs+2sc-1.5)pu));
hpen; lft4x1=round 2u; x1=x2=x5;
rt5x3=round(r-2u); x4=good0(x3-eps);
top4y1=top0y4=hh; bot4y2=bot5y3=0; y5=1/3hh;
new aa,bb;	% auxiliaries for intersection of lines
rt5x6=aa[rt5x1,rt5x3]; y6=aa[y1,y3];
rt5x6=bb[x5,x4]; y6=bb[y5,y4];
w5 draw 6..3;	% lower diagonal
lpen#; w5 draw 4..5;	% erase excess
hpen; w4 draw 1..2;	% stem
w0 draw 4..5; % upper diagonal
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower stem serif
	call `e dserif(4,0,5,-ucs);
	call `f dserif(4,0,5,ucs);	% upper diagonal serif
	call `g serif(3,5,1,-ucs);
	call `h serif(3,5,1,ucs);	% lower diagonal serif
fi.
"The letter L";
call charbegin(codeoffset+`L,12,2sc,sc,phh,0,0);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% upper stem serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y2; y4=y3+as;
call `e arm(2,3,4).	% arm and arm serif
"The letter M";
call charbegin(codeoffset+`M,16,2sc-.5mc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
if fudge≠1: new w0,w4;	% lines will be thinner in fudged styles
	w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft0x1=round 2u; x1=x2; top0y1=hh; bot0y2=0;
new w99; w99=round .8[w0,w4];
rt99x3=round(r-2u); x3=x4; top99y3=hh; bot99y4=0;
lft99x5=lft0x1+del; lft0x6=lft99x3-del; y1=y5; y6=y3;
x7-x5=x6-x8; lft4x7=lft0x8; bot4y7=0; y8=y7;
w0 draw 5..1..1..2;	% left stem
w4 draw 5..7;	% left diagonal
rpen#; w4 draw 8..6;	% erase excess at lower right
hpen; w0 draw 8..6..6..3;	% right diagonal
w99 draw 3..4;	% right stem
if ucs≠0: call `a dserif(2,0,1,-ucs);
	call `b dserif(2,0,1,ucs);	% lower left serif
	call `c serif(5,4,7,-ucs-del/u);	% upper left serif
	call `d serif(3,99,4,ucs);	% upper right serif
	call `e serif(4,99,3,-ucs);
	call `f serif(4,99,3,ucs);	% lower right serif
fi;
if fudge≠1: new w0,w4;	% restore normal sizes in fudged styles
	w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter N";
call charbegin(codeoffset+`N,14,2sc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; lft0x1=round(2+.25ucs)u; x1=x2; top0y1=hh; bot0y2=0;
w0 draw 1..2;	% left stem
rt0x3=round(r-2u); x3=x4; top0y3=hh; bot0y4=0;
lft5x5=lft0x1+del; lft5x6=lft0x4-del; y1=y5; y6=y4;
draw 1..5; w5 draw 5..6; w0 draw 6..4;	% diagonal
rpen#; w5 draw 4..3;	% erase excess at lower right
hpen; w0 draw 4..3;	% right diagonal
if ucs≠0: call `a dserif(2,0,1,-ucs);
	call `b dserif(2,0,1,ucs);	% lower left serif
	call `c serif(5,5,6,-ucs-del/u);	% upper left serif
	call `d dserif(3,0,4,-ucs);
	call `e dserif(3,0,4,ucs);	% upper right serif
fi.
"The letter O";
call charbegin(codeoffset+`O,14,mc.lbowl,-mc(rbowl-.5pu),phh,0,mi[rbowl,.5pu]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5);	% left part of bowl
call `b darc(1,3,w5);	% right part of bowl
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter P";
call charbegin(codeoffset+`P,12,2sc,-mc(.75phh.slant-3pu),phh,0,mi[.75phh.slant-.5pu,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x4=7u; rt5x5=round(r-u); x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..6.	% lower bar line
"The letter Q";
call charbegin(codeoffset+`Q,14,mc.lbowl,-mc.rbowl,phh,0,mi[rbowl,0]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5);	% left part of bowl
call `b darc(1,3,w5);	% right part of bowl
x4=x5=4.5u; y4=0;
new aa; x5=aa[x1,x2]; y5=(sqrt(1-aa.aa))[.5y1+.5y2,y2];
x6=6.5u; y6=.15hh+1.5w6;
w0 draw (4..)5..6{1,0}; % left part of tail
vpen; x7=x8=x9=11u; bot8y8=bot6y9=-dd; top6y7=top8y8;
x10=round 13u; top8y10=0;
w6 ddraw 6{1,0}..7{1,0},6{1,0}..9{1,0};	% middle part of tail
w9 draw 8{1,0}..10{0,1};	% right part of tail
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter R";
hpen;
if ucs=0: call charbegin(codeoffset+`R,12.5,2sc,-mc(.75phh.slant-.75pu),
					phh,0,mi[.75phh.slant-.75pu,0]);
	rt5x5=round(r-.75u);
else: call charbegin(codeoffset+`R,14,2sc,0,phh,0,.75phh.slant-1.5pu);
	rt5x5=round(r-2u);
fi;
lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2;	% stem
if ucs≠0:
	call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,.5ucs);	% upper serif
	call `c serif(2,4,1,-ucs);
	call `d serif(2,4,1,ucs);	% lower serif
fi;
x3=x4=7u; x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3;	% upper bar line
call `e darc(3,5,w5);	% bowl
w0 draw 4..6;	% lower bar line
if ucs=0: rt4x7=round(r-u); bot4y7=0;
	w4 draw 4..7;	% diagonal stroke
else: x8=good5(x5-1.25u); lft5x8=lft0x7; rt5x8=rt0x9;
y7=y8=y9=1/3[y2,y4];
y13=5/6[y2,y4]; x13=1/sqrttwo[x4,x8];
draw |w0#|4{1,0}..|.25[w0,w5]|13{x8-x4,2/3(y8-y4)}..
	|w5#|8{0,-1};	% upper tail
y10=y11; bot0y10=-o; y12=.25[y2,y4];
x10=.5[x7,x12]; x11=.5[x9,x12]; rt0x12=round(r-.5u);
w0 ddraw 7{0,-1}..10{1,0}..12{0,1},
	9{0,-1}..11{1,0}..12{0,1};	% lower tail and hook
fi.
"The letter S";
call charbegin(codeoffset+`S,10,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
new w99; w99=round .3[w0,w4];
hpen; top0y1=hh+o; bot0y5=-o;
x3=.5r; y3=.52hh; lft99x2=round u; rt99x4=round(r-u);
if ucs=0: x1=x5=x3; lft0x6=round 2/3u; rt0x7=round(r-1.25u);
	y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
	w0 draw 6{x5-x6,3(y5-y6)}..5{1,0};	% lower left stroke
	draw 7{x1-x7,2(y1-y7)}..1{-1,0};	% upper right stroke
else: if w0=w4: x1=x5=x3; x6=x2; x7=x4;
		y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
		w0 draw 6{x5-x6,3(y5-y6)}..5{1,0};	% lower left stroke
		draw 7{x1-x7,2(y1-y7)}..1{-1,0};	% upper right stroke
		x8=x9=x6; y9=y6+ucs.aspect.u+eps; bot0y8=0;
		x10=x11=x7; y11=y7-ucs.aspect.u-eps; top0y10=hh;
		w0 draw 8..9;	% lower serif
		draw 10..11;	% upper serif
	else: x1=x3-.5u; x5=x3+.5u; lft0x6=round u; rt0x7=round(r-1.5u);
		y6=good6 1/3hh-1; y7=good6 2/3hh+1;
		bot0y8=0; y9=y6; x8=x6; rt4x6=rt0x9;
		top0y10=hh; y11=y7; x10=x7; lft4x7=lft0x11;
		w0 ddraw 6..8,9..8;	% lower serif
		ddraw 7..10,11..10;	% upper serif
		rpen#; w4 draw 6{0,-1}..5{1,0};	% erase excess
		lpen#; w4 draw 7{0,1}..1{-1,0};	% ditto
		hpen; w0 draw 6{0,-1}..5{1,0};	% lower left stroke
		draw 7{0,1}..1{-1,0};	% upper right stroke
	fi;
fi;
call `a sdraw(1,2,3,4,5,w99,round(pixels.pwv.aspect+blacker),
				-hh/(50u)).	% middle stroke
"The letter T";
call charbegin(codeoffset+`T,13,sc+.75mc.phh.slant,sc-mc(armic-2.5pu),
				phh,0,mi[armic,2.5pu]);
hpen; x1=good4 6.5u; x2=x1;
top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-.5ucs);
	call `b serif(1,4,2,.5ucs);	% upper bracketing
	call `c serif(2,4,1,-1.25ucs);
	call `d serif(2,4,1,1.25ucs);	% lower serif
fi;
rt0x3=round(r-1.25u); x4=round(x3+.25u); y3=y1; y4=y3-as;
lft0x5=round 1.25u; x6=round(x5-.25u); y5=y1; y6=y5-as;
call `e arm(1,3,4);	% upper right arm and serif
call `f arm(1,5,6).	% upper left arm and serif
"The letter U";
call charbegin(codeoffset+`U,13,2sc(1-mi)+mc(.3phh.slant+pu),2sc-.5mc(rstem-pu),
				phh,0,hic.rstem+.5mi.pu);
hpen;
if fixwidth≠0: lft4x1=round(1.5u); rt0x5=round(r-1.5u);
else: lft4x1=round 2u; rt0x5=round(r-2u);
fi;
x2=x1; x4=x5; x3=.5[x2,x4];
top4y1=hh; y5=y1; y2=y4=.36hh; bot0y3=-o;
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% left serif
	call `c dserif(5,0,4,-ucs);
	call `d dserif(5,0,4,ucs);	% right serif
fi;
w4 draw 1..2;	% upper left stroke
call `e arc(3,2,w4);	% lower left stroke
w0 draw 3{1,0}..4{0,1};	% lower right stroke
draw 4..5.	% upper right stroke
"The letter V";
call charbegin(codeoffset+`V,13,2sc+mc(phh.slant-pu),2sc-mc(rv-4pu),
				phh,0,mi[rv,4pu]);
hpen; lft4x1=round 1.5u; rt0x4=round(r-1.5u);
x2-x1=x4-x3; lft0x3=lft4x2+del;
top4y1=hh; y4=y1; bot4y2=-o-oo; y3=y2;
w4 draw 1..2; w0 draw 2..3;	% left diagonal stroke
rpen#; w4 draw 3..4;	% erase excess at lower right
hpen; w0 draw 3..4;	% right diagonal stroke
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% left serif
	call `c dserif(4,0,3,-ucs);
	call `d dserif(4,0,3,ucs);	% right serif
fi.
"The letter W";
call charbegin(codeoffset+`W,18,2sc+mc(phh.slant-.5pu),2sc-mc(rv-.75ucs.pu-2.5pu),
				phh,0,mi[rv-.75ucs.pu,2.5pu]);
if fudge≠1: new w0,w4;	% lines will be thinner in fudged styles
	w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft4x1=round 1.5u;
rt0x9=rt4x10; x11-x10=x9-x1; rt0x11=r-1.5u;
% $x↓9$, $x↓{10}$, and $x↓{11}$ are approximations to $x↓4$, $x↓5$, and $x↓8$.
x5-x1=x6-x2=x7-x3=x8-x4=round(x10-x1);
% The idea is to draw two V's displaced by an integer amount.
top4y1=hh; bot4y2=-o-oo; y3=y6=y7=y2; y4=y5=y8=y1;
rt0x4=rt4x5; lft0x3=lft4x2+del; x2-x1=x4-x3;
w4 draw 1..2; w0 draw 2..3;	% first diagonal
rpen#; w4 draw 3..4;	% erase excess
hpen; w0 draw 3..4;	% second diagonal
w4 draw 5..6; w0 draw 6..7;	% third diagonal
rpen#; w4 draw 7..8;	% erase excess
hpen; w0 draw 7..8;	% fourth diagonal
if ucs≠0: call `a serif(1,4,2,-.75ucs);
	if w0=w4: call `b serif(1,4,2,ucs);
	else: call `b serif(1,4,2,.5ucs);
	fi;	% left serif
	call `c serif(5,4,6,-.5ucs);
	call `d serif(5,4,6,.5ucs);	% middle serif
	call `e dserif(8,0,7,-ucs);
	call `f dserif(8,0,7,.75ucs);	% right serif
fi;
if fudge≠1: new w0,w4;	% restore normal sizes in fudged styles
	w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter X";
call charbegin(codeoffset+`X,13,2sc,2sc-.5mc.rv,phh,0,hic.rv);
hpen; lft5x1=round 1.5u; rt5x4=round(r-1.5u); x3=x1; x4=x2;
top5y1=hh; bot5y4=0; y2=y1; y3=y4;
w5 draw 1..4;	% upper left to lower right diagonal
w0 draw 3..2;	% lower left to upper right diagonal
if ucs≠0: call `a serif(1,5,4,-ucs);
	call `b serif(1,5,4,ucs);	% upper left serif
	call `c serif(4,5,1,-ucs);
	call `d serif(4,5,1,ucs);	% lower right serif
	new ss; ss=.5(w5-w0)/u;	% correction to \\{ucs} makes $w↓0$ like $w↓5$
	call `e dserif(2,0,3,-ucs-ss);
	call `f dserif(2,0,3,ucs+ss);	% upper right serif
	call `g dserif(3,0,2,-ucs-ss);
	call `h dserif(3,0,2,ucs+ss);	% lower left serif
fi.
"The letter Y";
call charbegin(codeoffset+`Y,13,2sc+mc(phh.slant-.5pu),2sc-mc(rv-4pu),
				phh,0,mi[rv,4pu]);
hpen; lft5x1=round 1.5u; rt0x2=round(r-1.5u);
top5y1=top0y2=hh;
rt5x13=rt0x14; x13-x1=x2-x14;	% approximations before rounding
x3=good5x13; rt5x3=rt4x6=rt0x4; lft0x9=lft5x3;
y3=y4=y6=y9=.48hh; y7=y8=.5[y5,y6]; bot4y5=0;
x5=x6=x8; lft0x7=lft4x8;
w5 draw 1..3;	% left diagonal
minvr 0; minvs 0;
w0 ddraw 9{x3-x1,y3-y1}..7{0,-1}, 6..8;	% transition
minvr .5; minvs .5;
w4 draw 6..5;	% stem
w0 draw 4..2;	% right diagonal
if ucs≠0: call `a serif(1,5,3,-ucs);
	call `b serif(1,5,3,ucs);	% upper left serif
	call `c serif(5,4,6,-ucs);
	call `d serif(5,4,6,ucs);	% lower serif
	call `e dserif(2,0,4,-ucs);
	call `f dserif(2,0,4,ucs);	% upper right serif
fi.
"The letter Z";
call charbegin(codeoffset+`Z,11,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
hpen; lft5x2=round u; rt5x1=round(r-u);
top5y1=hh; bot5y2=0;
lft0x3=round 1.5u; x4=round(x3-.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.5u); x6=round(x5+.5u); y5=y2; y6=y5+1.2as;
call `a arm(1,3,4);	% upper arm and serif
w5 draw 1..2;	% diagonal
call `b arm(2,5,6).	% lower arm and serif